<?php
/**
 * @author Sunny
 * @date 2023/7/24
 * @time 14:39 下午
 */

namespace app\api\service;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\Green\V20220302\Green;
use AlibabaCloud\SDK\Green\V20220302\Models\TextModerationRequest;

class TextModerationService{
    public $msg="";//返回结果

    //check方法根据指定文本做检查
    public function check($text)
    {
        if(!trim($text)){
            return true;
        }
        $request = new TextModerationRequest();
        /*
        文本检服务 service code
        */
        $request->service = "ai_art_detection";
        $arr = array();
        $request->serviceParameters = json_encode(['content' => $text]);

        $config = new Config([
            /**
             * 阿里云账号AccessKey拥有所有API的访问权限，建议您使用RAM用户进行API访问或日常运维。
             * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里，否则可能导致AccessKey泄露，威胁您账号下所有资源的安全。
             * 常见获取环境变量方式：
             * 获取RAM用户AccessKey ID：getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
             * 获取RAM用户AccessKey Secret：getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
             */
            "accessKeyId" => config("sms.ali_sms.accessKeyId"),
            "accessKeySecret" => config("sms.ali_sms.accessKeySecret"),
            // 设置HTTP代理。
            // "httpProxy" => "http://10.10.xx.xx:xxxx",
            // 设置HTTPS代理。
            // "httpsProxy" => "https://10.10.xx.xx:xxxx",
            "endpoint" => "green-cip.cn-shanghai.aliyuncs.com",
            "regionId" => "cn-shanghai"

        ]);
        // 注意，此处实例化的client请尽可能重复使用，避免重复建立连接，提升检测性能。
        $client = new Green($config);
        // 创建RuntimeObject实例并设置运行参数。
        $runtime = new RuntimeOptions([]);
        $runtime->readTimeout = 10000;
        $runtime->connectTimeout = 10000;
        try {
            // 调用接口，获取检测结果。
            $response = $client->textModerationWithOptions($request, $runtime);
            if($response->body->data->labels){
                $this->msg="提交的数据涉嫌".$response->body->data->reason;
                return false;
            }
            return true;
        } catch (Exception $e) {
            var_dump($e->getMessage());
            var_dump($e->getErrorInfo());
            var_dump($e->getLastException());
            var_dump($e->getLastRequest());
        }
    }

}
